package org.googlecode.jef.spring; import java.sql.SQLException; import jef.database.DbClient; import jef.database.datasource.DataSourceWrapper; import jef.database.datasource.DataSources; import jef.database.dialect.ColumnType; import jef.database.meta.TupleMetadata; import jef.database.test.SpringTestBase; import org.apache.commons.dbcp.BasicDataSource; import org.googlecode.jef.spring.case1.UserJdbcWithoutTransManagerService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; @SuppressWarnings("deprecation") public class JDBCTransactionTest extends SpringTestBase{ /* * mysql> create table t_user (user_name varchar(255),score int,password1 varchar(255)); */ @Test public void testJdbcWithoutTransManager() throws SQLException{ ApplicationContext ctx=super.initContext(); UserJdbcWithoutTransManagerService service = (UserJdbcWithoutTransManagerService) ctx.getBean("service1"); JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate"); BasicDataSource basicDataSource = (BasicDataSource) jdbcTemplate.getDataSource(); checkTable(basicDataSource); // ①.检查数据源autoCommit的设置 System.out.println("autoCommit:" + basicDataSource.getDefaultAutoCommit()); // ②.插入一条记录,初始分数为10 jdbcTemplate.execute("INSERT INTO t_user (user,password,score) VALUES ('tom','123456',10)"); // ③.调用工作在无事务环境下的服务类方法,将分数添加20分 service.addScore("tom", 20); // ④.查看此时用户的分数 int score = jdbcTemplate.queryForObject("SELECT score FROM t_user WHERE user='tom'",Integer.class); System.out.println("score:" + score); // jdbcTemplate.execute("DELETE FROM t_user WHERE user='tom'"); assertEquals(30, score); } private void checkTable(BasicDataSource basicDataSource) throws SQLException { DataSourceWrapper dsw=DataSources.wrapFor(basicDataSource); DbClient db=new DbClient(dsw,2,2,null); TupleMetadata table=new TupleMetadata("t_user"); table.addColumn("user", new ColumnType.Varchar(64)); table.addColumn("password", new ColumnType.Varchar(64)); table.addColumn("score", new ColumnType.Int(10)); db.dropTable(table); db.createTable(table); } }